package com.agua.enturno.persistencia.dao.impl;

import com.agua.enturno.modelo.roles.Usuario;
import com.agua.enturno.persistencia.dao.UsuarioDAO;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Restrictions;
import org.jasypt.util.password.BasicPasswordEncryptor;

import java.util.List;

public class UsuarioHibernateDAO extends GenericHibernateDAO<Usuario, Long>
		implements UsuarioDAO {

	private BasicPasswordEncryptor passwordEncryptor = new BasicPasswordEncryptor();
	
	protected UsuarioHibernateDAO() {
		super(Usuario.class);
	}

	@Override
	public Usuario findByUsername(String username) {

		Usuario usuario = null;
		
		DetachedCriteria criteria = DetachedCriteria.forClass(Usuario.class);
		criteria.add(Restrictions.eq("email", username));

		List<Usuario> usuariosEncontrados = this.findByCriteria(criteria); 
		if ( !usuariosEncontrados.isEmpty() )
			usuario = usuariosEncontrados.get(0);
		
		return usuario;
	}

	@Override
	public boolean isAuthenticUser(String username, String password) {
		
		Usuario usuario = this.findByUsername(username);
		
		if ( usuario == null )
			return false;
		
		return passwordEncryptor.checkPassword(password, usuario.getPassword());
	}
	
    @Override
    public Usuario saveOrUpdate(Usuario usuario) {
    	
    	if (usuario.getId() == null) 
    		usuario.setPassword(passwordEncryptor.encryptPassword(usuario.getPassword()));
    	
    	return super.saveOrUpdate(usuario);
    }

}
